package com.youka.bussiness.common.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

public class ReflectUtil {

    public static Map getObjectValueToMap(Object model, Map<String, String> parameters) {
        try {
            //拿到该类
            Class<?> clz = model.getClass();
            Field[] field = clz.getDeclaredFields();//获取实体类的所有属性，返回Field数组
            for (Field key : field) {
                String name = key.getName();    //获取属性的名字
                name = name.substring(0, 1).toUpperCase() + name.substring(1); //将属性的首字符大写，方便构造get，set方法
                String type = key.getGenericType().toString();    //获取属性的类型
                //Method m = model.getClass().getMethod("get" + name);
                //String value = (String) m.invoke(model);    //调用getter方法获取属性值
                if (type.equals("class java.lang.String")) { // 如果type是类类型，则前面包含"class "，后面跟类名
                    Method m = model.getClass().getMethod("get" + name);
                    String value = (String) m.invoke(model); // 调用getter方法获取属性值
                    if (value == null) {
                        m = model.getClass().getMethod("set" + name, String.class);
                        m.invoke(model, "");
                    }
                    parameters.put(key.getName(), value);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return parameters;
    }

    public static List getObjectValueToList(Object model, List parameters) {
        try {
            //拿到该类
            Class<?> clz = model.getClass();
            Field[] field = clz.getDeclaredFields();//获取实体类的所有属性，返回Field数组
            for (Field key : field) {
                String name = key.getName();    //获取属性的名字
                name = name.substring(0, 1).toUpperCase() + name.substring(1); //将属性的首字符大写，方便构造get，set方法
                String type = key.getGenericType().toString();    //获取属性的类型
                Method m = model.getClass().getMethod("get" + name);
                //String value = (String) m.invoke(model);    //调用getter方法获取属性值
                parameters.add(m.invoke(model));

                /*if (type.equals("class java.lang.String")) { // 如果type是类类型，则前面包含"class "，后面跟类名
                    Method m = model.getClass().getMethod("get" + name);
                    String value = (String) m.invoke(model); // 调用getter方法获取属性值
                    if (value == null) {
                        m = model.getClass().getMethod("set"+name,String.class);
                        m.invoke(model, "");
                    }
                    parameters.add(value);
                }*/
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return parameters;
    }

    // 把一个字符串的第一个字母大写、效率是最高的、
    private static String getMethodName(String filedName) {
        byte[] items = filedName.getBytes();
        items[0] = (byte) ((char) items[0] - 'a' + 'A');
        return new String(items);
    }
}
